<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
require_once ('./application/controllers/authenticate.php');

class Category extends Authenticate {

    const CATEGORY_PER_PAGE = 100;
    const CATEGORY_PAGE_RANGE = 5;

    function __construct() {
        parent::__construct();
        $this->load->model('cms_category_model');
        $this->load->model('cms_article_model');
        $this->load->library('upload');
    }

    protected function _eventLoadLayout() {
        $this->page['title'] = 'Quản lý danh mục tin tức';
        $this->module['title'] = 'Quản lý danh mục tin tức';
    }

    private function check_has_privileges($data = array()) {
        $data['has_privilege_view'] = false;
        $data['has_privilege_new'] = false;
        $data['has_privilege_edit'] = false;
        $data['has_privilege_delete'] = false;
        if ($this->admin_model->is_admin()) {
            $data['has_privilege_view'] = true;
            $data['has_privilege_new'] = true;
            $data['has_privilege_edit'] = true;
            $data['has_privilege_delete'] = true;
        } else {
            $privileges = $this->admin_model->get_privileges();
            if (isset($privileges['admin/cms/category/view'])) {
                $data['has_privilege_view'] = true;
            }
            if (isset($privileges['admin/cms/category/new'])) {
                $data['has_privilege_new'] = true;
            }
            if (isset($privileges['admin/cms/category/edit'])) {
                $data['has_privilege_edit'] = true;
            }
            if (isset($privileges['admin/cms/category/delete'])) {
                $data['has_privilege_delete'] = true;
            }
        }
        return $data;
    }

    function index() {
        try {
            global $active_article_function;
            $active_article_function = 'admin/cms/category/index';
            $data = $this->_initData();
            $data = $this->check_has_privileges($data);
            $this->setPageContent('admin/cms/category/grid', $data);
            $this->renderLayout('layouts/fullcolumn');
        } catch (Exception $ex) {
            echo $ex->getMessage();
        }
    }

    protected function _initData() {
        $data['collection'] = $this->cms_category_model->get_categories();
        $data['save_action'] = site_url('admin/cms/category/save', true);
        return $data;
    }

    function save() {
        try {

            $id = $this->input->post('id');
            $data = $this->input->post('data');
            if (empty($id)) {
                $privileges = $this->check_has_privileges();
                if (!$privileges['has_privilege_new']) {
                    $this->st_registry->register('admin/cms/category/error', 'Bạn không có quyền tạo chuyên mục mới');
                    redirect(site_url('admin/cms/category/index', true));
                    exit();
                }
                $id = $this->cms_category_model->add_category($data);
                $this->st_registry->register('admin/cms/category/success', 'Thêm mới danh mục tin tức thành công');
            } else {
                $privileges = $this->check_has_privileges();
                if (!$privileges['has_privilege_edit']) {
                    $this->st_registry->register('admin/cms/category/error', 'Bạn không có quyền sửa đổi thông tin chuyên mục');
                    redirect(site_url('admin/cms/category/index', true));
                    exit();
                }
                $this->cms_category_model->update_category($id, $data);
                $this->st_registry->register('admin/cms/category/success', 'Sửa đổi thông tin danh mục tin tức thành công');
            }
            $this->cms_category_model->get_group_cat(true);//xóa cache nhóm danh mục liên quan đến bệnh
        } catch (Exception $ex) {
            $this->st_registry->register('admin/cms/category/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
        redirect(site_url('admin/cms/category/index', true));
    }
    
    function edit() {
        try {
            $id = $this->input->getParam('id');
            if (empty($id)) {
                throw new Exception('Không xác định được danh mục cần sửa đổi thông tin');
                exit();
            }
            $data = $this->_initData();
            $data['category'] = $this->cms_category_model->load_by_id($id);
            $data['parents'] = $this->cms_category_model->get_categories();
            $this->setPageContent('admin/cms/category/grid', $data);
            $this->renderLayout('layouts/fullcolumn');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/cms/category/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
    }
    
    function ajax_edit() {
        try {
            $id = $this->input->getParam('id');
            if (empty($id)) {
                throw new Exception('Không xác định được danh mục cần sửa đổi thông tin');
                exit();
            }
            $data['category'] = $this->cms_category_model->load_by_id($id);
            $data['collection'] = $this->cms_article_model->get_collection(0, 10, 'CONCAT(",", ca.category_ids, ",") LIKE "%,' . $id . ',%"', 'id DESC');
            $data['parents'] = $this->cms_category_model->get_categories();
            $data['save_action'] = site_url('admin/cms/category/save', true);
            $data = $this->check_has_privileges($data);
            $this->setPageContent('admin/cms/category/ajax/edit', $data);
            $this->renderLayout('layouts/ajax');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/cms/category/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
    }    

    function delete() {
        try {
            $privileges = $this->check_has_privileges();
            $id = intval(trim($this->input->getParam('id')));
            if (empty($id)) {
                $this->st_registry->register('admin/cms/category/error', 'Không xác định được danh mục cần xóa (ID)?');
                redirect(site_url('admin/cms/category/index', true));
                exit();
            }
            if (!$privileges['has_privilege_delete']) {
                $this->st_registry->register('admin/cms/category/error', 'Bạn không có quyền xóa chuyên mục');
                redirect(site_url('admin/cms/category/index', true));
                exit();
            }
            $this->cms_category_model->delete_category($id);
            $this->st_registry->register('admin/cms/category/success', 'Xóa danh mục thành công');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/cms/category/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
        redirect(site_url('admin/cms/category/index', true));
    }

}